public class question_36 {
}
class Solution_36 {
    public boolean isValidSudoku(char[][] board) {
        int board_num[][]=new int[9][9];
//      这里需要对原始输入的char类型的数组进行转化
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                if((board[i][j]>48)&&(board[i][j]<58)){
                    board_num[i][j]=board[i][j]-48;
                }else{
                    board_num[i][j]=0;
                }
            }
        }        
//        先遍历每一行
        int n=9;
        int m=9;
//        先看一下每一行是否满足
        for (int i = 0; i < n; i++) {
//            这里数组定义完之后的默认的初始值是0
            int arr[]=new int[10];
            for (int j = 0; j < m; j++) {
                if(board_num[i][j]==0){
                    continue;
                }
                if(arr[board_num[i][j]]==1){
                    return false;
                }else {
                    arr[board_num[i][j]]=1;
                }
            }
        }
//        再看一下每一列是否满足
        for (int i = 0; i < n; i++) {
//            这里数组定义完之后的默认的初始值是0
            int arr[]=new int[10];
            for (int j = 0; j < m; j++) {
                if(board_num[j][i]==0){
                    continue;
                }
                if(arr[board_num[j][i]]==1){
                    return false;
                }else {
                    arr[board_num[j][i]]=1;
                }
            }
        }
//        接下来看一下每一个小方格是否满足
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
//                到这一步表示确定了一个小的3*3的矩形了
                int arr[]=new int [10];
                int rows_start=i*3;
                int colum_start=j*3;
                for (int k = 0; k < 3; k++) {
                    for (int l = 0; l < 3; l++) {
                        if(board_num[rows_start+k][colum_start+l]==0){
                            continue;
                        }
                        if(arr[board_num[rows_start+k][colum_start+l]]==1){
                            return false;
                        }else {
                            arr[board_num[rows_start+k][colum_start+l]]=1;
                        }
                    }
                }

            }

        }

        return true;
    }

    public static void main(String[] args) {

        Solution_36 solution_36=new Solution_36();
        char[][] board = {
                {'5', '3', '.', '.', '7', '.', '.', '.', '.'},
                {'6', '.', '.', '1', '9', '5', '.', '.', '.'},
                {'.', '9', '8', '.', '.', '.', '.', '6', '.'},
                {'8', '.', '.', '.', '6', '.', '.', '.', '3'},
                {'4', '.', '.', '8', '.', '3', '.', '.', '1'},
                {'7', '.', '.', '.', '2', '.', '.', '.', '6'},
                {'.', '6', '.', '.', '.', '.', '2', '8', '.'},
                {'.', '.', '.', '4', '1', '9', '.', '.', '5'},
                {'.', '.', '.', '.', '8', '.', '.', '7', '9'}
        };
        solution_36.isValidSudoku(board);
    }
}
